const fs = require("fs");
const path = require("path");
const { loadConfig } = require("./config");

// 读取配置文件
const config = loadConfig();
const mediaStoreDir = config.mediaStore || "./mediaStore";

// 确保媒体仓库目录存在
if (!fs.existsSync(mediaStoreDir)) {
  fs.mkdirSync(mediaStoreDir, { recursive: true });
}

/**
 * 从媒体仓库查找媒体文件（视频优先，图片备选）
 * @param {string} keywords - 搜索关键词
 * @returns {string|null} 媒体文件路径，如果未找到则返回null
 */
function findImageInStore(keywords) {
  try {
    // 标准化关键词作为文件名（移除特殊字符）
    const normalizedKeywords = keywords.toLowerCase().replace(/[^a-z0-9\u4e00-\u9fff]+/gi, "_");

    // 优先查找视频文件
    const videoExtensions = [".mp4", ".mov", ".avi", ".mkv"];
    for (const ext of videoExtensions) {
      const filePath = path.join(mediaStoreDir, `${normalizedKeywords}${ext}`);
      if (fs.existsSync(filePath)) {
        return filePath;
      }
    }

    // 如果没有找到视频，查找图片文件
    const imageExtensions = [".jpg", ".jpeg", ".png", ".gif"];
    for (const ext of imageExtensions) {
      const filePath = path.join(mediaStoreDir, `${normalizedKeywords}${ext}`);
      if (fs.existsSync(filePath)) {
        return filePath;
      }
    }

    // 如果精确匹配失败，尝试模糊匹配（视频优先）
    const files = fs.readdirSync(mediaStoreDir);

    // 先查找视频文件
    for (const file of files) {
      const fileName = path.parse(file).name.toLowerCase();
      if (videoExtensions.includes(path.extname(file).toLowerCase()) && (fileName.includes(normalizedKeywords) || normalizedKeywords.includes(fileName))) {
        return path.join(mediaStoreDir, file);
      }
    }

    // 再查找图片文件
    for (const file of files) {
      const fileName = path.parse(file).name.toLowerCase();
      if (imageExtensions.includes(path.extname(file).toLowerCase()) && (fileName.includes(normalizedKeywords) || normalizedKeywords.includes(fileName))) {
        return path.join(mediaStoreDir, file);
      }
    }

    return null;
  } catch (error) {
    console.error(`！！！查找媒体仓库时出错: ${error.message}`);
    return null;
  }
}

/**
 * 将媒体文件保存到仓库
 * @param {string} sourcePath - 源媒体文件路径
 * @param {string} keywords - 关键词
 */
function saveImageToStore(sourcePath, keywords) {
  try {
    // 标准化关键词作为文件名（移除特殊字符）
    const normalizedKeywords = keywords.toLowerCase().replace(/[^a-z0-9\u4e00-\u9fff]+/gi, "_");

    // 根据源文件扩展名确定目标文件扩展名
    const sourceExt = path.extname(sourcePath).toLowerCase();
    const targetExt = sourceExt; // 保持原始扩展名

    const targetPath = path.join(mediaStoreDir, `${normalizedKeywords}${targetExt}`);

    // 复制文件到仓库
    fs.copyFileSync(sourcePath, targetPath);
    console.log(`    媒体文件已保存到仓库: ${targetPath}`);
  } catch (error) {
    console.error(`！！！保存媒体文件到仓库时出错: ${error.message}`);
  }
}

module.exports = {
  findImageInStore,
  saveImageToStore,
};
